package com.molichuxing.gateway.api.services;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.result.ResponseResult;
import com.molichuxing.gateway.bff.basic.entity.response.VehicleModlemakeVo;
import com.molichuxing.gateway.bff.car.entity.request.modify.PdiCheckModifyVo;
import com.molichuxing.gateway.bff.car.entity.response.*;

import java.util.List;
import java.util.Map;

/**
 * @Author: renzhengyu
 * @Description:
 * @Date: Created in 14:33 2019/9/11
 * @Modified By:
 **/
public interface VehicleApiService {

    /**
     * 车辆违章列表
     * @return
     */
    public ResponseResult<Paged<CarsViolationVo>> getCarsViolationPaged(Map<String, Object> params , Integer pageNum, Integer pageSize);

    /**
     * 根据查询条件获取车辆事故列表信息
     *    * licencePlate 车牌号
     *    * vin 车架号
     *    * userId 用户id
     *    * liabilityType 责任类型（0：无责，1：全责，2：主责，3：同责，4：次责）
     *    * isCasualty 是否有人伤（0：无人伤，1：有人伤）
     *    * accidentType 事故类型（1:单方事故，2：双方事故，3：多方事故，4：停放受损，5：车辆盗抢，6：车辆自燃，7：车辆涉水，8：重大自然灾害）
     *    * accidentStartTime     出险开始时间
     *    * accidentEndTime     出险结束时间
     *    * status 事故状态（1：事故未确认，2：事故已确认，3：结案未确认，4：已结案，5：无效报备）
     * @param map
     * @param pageSize
     * @param pageNum
     * @return
     */
    ResponseResult<Paged<AccidentBizVo>> getCarAccidentPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

    /**
     * 根据事故id获取事故信息
     * @param accidentId
     * @return
     * @throws Exception
     */
    ResponseResult<AccidentDetailVo> getAccident(Integer accidentId) throws Exception;


    /**
     * 根据条件查询车辆列表
     * @param selectParams
     * licencePlate(车牌) vin（车架号） vehicleId（车型） purchaseStartDate（采购开始时间） purchaseEndDate（采购结束时间）
     * stockId（仓库id）  vehicleType（车辆类型）  status（运营状态）   plateStatus（上牌状态）
     * @param pageSize
     * @param pageNum
     * @return
     */
    public ResponseResult<Paged<CarVo>> getCarList(Map<String, Object> selectParams, Integer pageNum, Integer pageSize);


    /**
     * 获取车辆已有的品牌
     * @return
     */
    public ResponseResult<List<VehicleModlemakeVo>> getVehicleMakeByVehicle();

    /**
     * 根据vin获取车辆轨迹的时间段
     * @param vin
     * @return
     */
    public ResponseResult<List<String>> getTrajectoryTime(String vin);

    /**
     * 根据vin获取车辆轨迹
     * @param vin
     * @return
     */
    public ResponseResult<List<IovTrajectoryVo>> getTrajectory(String vin, String startTime, String endTime);


    /**
     * 根据车辆id获取车辆详细信息
     * @param carId
     * @return
     */
    public ResponseResult<CarDetailVo> getCarDetail(Integer carId);


    /**
     * 根据车辆Id获取保险信息
     * @param carId
     * @param type
     * @return
     */
    public ResponseResult<List<CarInsuranceVo>> getInsuranceList(Integer carId, Integer type);

    /**
     * 根据车辆id获取事故报备信息
     * @param carId
     * @return
     */
    public ResponseResult<List<AccidentBizVo>> getCarAccidentList(Integer carId);

    /**
     * 根据车辆id获取检验信息
     * @param carId
     * @return
     */
    public ResponseResult<List<CarCheckVo>> getCarCheckListByCarId(Integer carId);

    /**
     * 根据车辆id获取违章信息
     * @param carId
     * @return
     */
    public ResponseResult<List<CarsViolationVo>> getViolationListByCarId(Integer carId);

    /**
     * 根据车辆id获取保养信息
     * @param carId
     * @return
     */
    public ResponseResult<List<MaintenanceRecordVo>> getMaintenanceByCarId(Integer carId);
    /*****************车检  开始*******************************************/

    /**
     * 获取PDI检验车辆检验列表
     *
     * @param selectParams
     * @return
     */
    ResponseResult<Paged<CarCheckVo>> getPdiCarCheck(Map<String, Object> selectParams);

    /**
     * @param checkId 检验详情基础信息
     * @return
     */
    ResponseResult<CarBasicVo> getCheckBasicInfo(Integer checkId);

    /**
     * 根据检验id 获取PDI检验信息检验详情
     *
     * @param checkId
     * @return
     */
    ResponseResult<PdiCheckVo> getPdiCheckNewInfo(Integer checkId);

    /***
     * PDI检验-上传检验报告
     * @param pdiCheckModifyVo
     * @return
     * @throws Exception
     */
    ResponseResult<Boolean> pdiCheckCar(PdiCheckModifyVo pdiCheckModifyVo) throws Exception;


    /*****************车检  开始*******************************************/

}
